<!DOCTYPE html>
<html lang="zh">
<head>
    <meta charset="UTF-8">
    <meta http-equiv="X-UA-Compatible" content="IE=edge">
    <meta name="viewport" content="width=device-width, initial-scale=1.0">
    <title>Document</title>
</head>
<body>
    

<script>
// Map是ES6提供的一种新的数据结构
// Map类似于对象，是一种更纯粹的键值对数据集合
// 对象的键只能是字符串，Map的键可以是任何值
// Map是一个构造函数，用于创建Map对象
// 创建Map对象时，可以传入一个二维数组

// 创建Map对象
let m1 = new Map();
console.log( m1 );// Map(0) {size: 0}
console.log( typeof m1 );// 'object'

let m2 = new Map([['name','张三'],['age',23],['sex','男']]);
// console.log( m2 );// Map(3) {'name' => '张三', 'age' => 23, 'sex' => '男'}

// 操作Map：
// console.log( m2.size );// 3 键值对个数
// m2.set(123,'hello');// 添加一个键值对
// m2.delete('age');// 删除一个键值对
// m2.set('sex','女');// 修改某个键的值
// console.log( m2.get('name') );// '张三' 获取值
// console.log( m2.get(123) );// 'hello' 获取值
// m2.clear();// 清空所有数据
// console.log( m2 );

// 遍历map数据
m2.forEach((val,key)=>{
    console.log( key );
    console.log( val );
})

for (let a of m2){
    console.log( a ); // ['name','张三'] ['age',23] ['sex','男']
}

for (let [key,val] of m2){
    console.log( key );
    console.log( val );
}

let obj = {
    name: '李四',
    age: 24,
    sex: '女'
}
// let m3 = new Map(obj);// 报错
// console.log( m3 );

let res = Object.entries(obj);
console.log( res );// [['name','李四'],['age',24],['sex','女']]

let m4 = new Map(res);
console.log( m4 );// Map(3) {'name' => '李四', 'age' => 24, 'sex' => '女'}

</script>
</body>
</html>